/** * Copyright (c) 2004-2011 Wang Jinbao(Julian Wong), http://www.ralasafe.com * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php */ package org.ralasafe; import java.util.Iterator; import java.util.Map; import org.ralasafe.application.ApplicationManager; import org.ralasafe.application.ApplicationManagerImpl; import org.ralasafe.entitle.BackupManager; import org.ralasafe.entitle.BackupManagerImpl; import org.ralasafe.entitle.BusinessDataManager; import org.ralasafe.entitle.BusinessDataManagerImpl; import org.ralasafe.entitle.EntitleManager; import org.ralasafe.entitle.EntitleManagerImpl; import org.ralasafe.entitle.QueryManager; import org.ralasafe.entitle.QueryManagerImpl; import org.ralasafe.entitle.UserCategoryManager; import org.ralasafe.entitle.UserCategoryManagerImpl; import org.ralasafe.privilege.PrivilegeManager; import org.ralasafe.privilege.PrivilegeManagerImpl; import org.ralasafe.privilege.RoleManager; import org.ralasafe.privilege.RoleManagerImpl; import org.ralasafe.privilege.UserRoleManager; import org.ralasafe.privilege.UserRoleManagerImpl; import org.ralasafe.user.UserManager; import org.ralasafe.userType.UserType; import org.ralasafe.userType.UserTypeManager; import org.ralasafe.userType.UserTypeManagerImpl; public class Factory { private static java.util.Map privilegeManagers = new java.util.HashMap(); private static java.util.Map roleManagers = new java.util.HashMap(); private static java.util.Map userRoleManagers = new java.util.HashMap(); private static final ApplicationManager applicationManager; private static final BackupManager backupManager; private static final UserTypeManager userTypeManager; private static java.util.Map userManagers = new java.util.HashMap(); private static java.util.Map filterManagers = new java.util.HashMap(); private static java.util.Map queryManagers = new java.util.HashMap(); private static java.util.Map userCategoryManagers = new java.util.HashMap(); private static java.util.Map businessDataManagers = new java.util.HashMap(); private static java.util.Map entitlementManagers = new java.util.HashMap(); static { applicationManager = new ApplicationManagerImpl(); userTypeManager = new UserTypeManagerImpl(); backupManager = new BackupManagerImpl(); } public static BackupManager getBackupManager() { return backupManager; } public static UserTypeManager getUserTypeManager() { return userTypeManager; } public static UserManager getUserManager(String userTypeName) { if (userManagers.get(userTypeName) == null) { UserType userType = Factory.getUserTypeManager().getUserType( userTypeName); if (userType != null) { UserManager userManager = new UserManager(userType); userManagers.put(userTypeName, userManager); } } return (UserManager) userManagers.get(userTypeName); } /** * Update other managers when application changed. * * @param appName */ public static synchronized void applicationChanged(String appName) { privilegeManagers.remove(appName); roleManagers.remove(appName); userRoleManagers.remove(appName); // commonElementManagers.remove( commonElementManagers.get( appName ) ); // tableElementManagers.remove( tableElementManagers.get( appName ) ); filterManagers.remove(appName); queryManagers.remove(appName); userCategoryManagers.remove(appName); businessDataManagers.remove(appName); entitlementManagers.remove(appName); } public static ApplicationManager getApplicationManager() { return applicationManager; } public static PrivilegeManager getPrivilegeManager(String appName) { if (privilegeManagers.get(appName) == null) { synchronized (privilegeManagers) { privilegeManagers.put(appName, new PrivilegeManagerImpl(appName)); } } return (PrivilegeManager) privilegeManagers.get(appName); } public static synchronized RoleManager getRoleManager(String appName) { if (roleManagers.get(appName) == null) { synchronized (roleManagers) { roleManagers.put(appName, new RoleManagerImpl(appName)); } } return (RoleManager) roleManagers.get(appName); } public static synchronized QueryManager getQueryManager(String appName) { if (queryManagers.get(appName) == null) { synchronized (queryManagers) { queryManagers.put(appName, new QueryManagerImpl(appName)); } } return (QueryManager) queryManagers.get(appName); } public static synchronized UserCategoryManager getUserCategoryManager( String appName) { if (userCategoryManagers.get(appName) == null) { synchronized (userCategoryManagers) { userCategoryManagers.put(appName, new UserCategoryManagerImpl( appName)); } } return (UserCategoryManager) userCategoryManagers.get(appName); } public static synchronized BusinessDataManager getBusinessDataManager( String appName) { if (businessDataManagers.get(appName) == null) { synchronized (businessDataManagers) { businessDataManagers.put(appName, new BusinessDataManagerImpl( appName)); } } return (BusinessDataManager) businessDataManagers.get(appName); } public static synchronized EntitleManager getEntitleManager(String appName) { if (entitlementManagers.get(appName) == null) { synchronized (entitlementManagers) { entitlementManagers.put(appName, new EntitleManagerImpl(appName)); } } return (EntitleManager) entitlementManagers.get(appName); } public static synchronized UserRoleManager getUserRoleManager( String appName, String userTypeName) { if (userRoleManagers.get(appName) == null) { synchronized (userRoleManagers) { userRoleManagers.put(appName, new java.util.HashMap()); } } Map userRoleManagerMap = (Map) userRoleManagers.get(appName); if (userRoleManagerMap.get(userTypeName) == null) { synchronized (userRoleManagerMap) { userRoleManagerMap.put(userTypeName, new UserRoleManagerImpl( appName, userTypeName)); } } return (UserRoleManager) ((Map) userRoleManagers.get(appName)) .get(userTypeName); } /** * Update other managers when userType changed. * * @param appName */ public static synchronized void userTypeChanged(String userTypeName) { Iterator itr = userRoleManagers.values().iterator(); while (itr.hasNext()) { Map userRoleManagerMap = (Map) itr.next(); userRoleManagerMap.remove(userTypeName); } } /** * Update other managers when applicationUserType changed. * * @param appName */ public static synchronized void applicationUserTypeChanged(String appName, String userTypeName) { Map userRoleManagerMap = (Map) userRoleManagers.get(appName); if (userRoleManagerMap != null) { userRoleManagerMap.remove(userTypeName); } } }